package controllers; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import models.OPDept; import models.Order; import models.Product; import models.Warehouse; import views.AdminFrame2; import views.MessageDialogs; public class AdminFrameController { private static AdminFrame2 frame = new AdminFrame2(); private Warehouse stock = new Warehouse(); private static Product p; private Order o; private Iterator<Product> itProduct; private OPDept orders = new OPDept(); private Iterator<Order> itOrder; private SerializableManager manager = new SerializableManager(); public static final int UNDERSTOCK = 100; public static final int OVERSTOCK = 1000; private int total; public AdminFrameController() { frame.setAddActionListener(new AddButtonActionListener()); frame.setDelButtonActionListener(new DeleteButtonActionListener()); frame.setSearchButtonActionListener(new SearchButtonActionListener()); frame.setSeeActionListener(new SeeButtonActionListener()); frame.setSearch1ButtonActionListener(new Search1ButtonActionListener()); frame.setStockButtonActionListener(new StockButtonActionListener()); this.stock = manager.deserializeWharehouse(); this.orders = manager.deserializeOrders(); this.total = getTotalNumberOfProducts(stock); } public static void printTheProduct(Product p) { Object[] row = { p.getID(), p.getName(), p.getQuantity() }; ((DefaultTableModel) AdminFrame2.getTable().getModel()).addRow(row); } public class AddButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { System.out.println(total); if (checkForOverStock()) { JOptionPane.showMessageDialog(null, "The overstock limit has been exceeded!", "Error", JOptionPane.WARNING_MESSAGE); manager.serializaWarehouse(stock); } else { String[] p = MessageDialogs.addProductPanel(); Product product = new Product(Integer.parseInt(p[0]), p[1], Integer.parseInt(p[2])); stock.addProduct(product); printTheProduct(product); manager.serializaWarehouse(stock); } } } public class DeleteButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { if (checkForOverStock()) { JOptionPane.showMessageDialog(null, "The number of products is under limit!", "Error", JOptionPane.WARNING_MESSAGE); manager.serializaWarehouse(stock); } else { int viewIndex = AdminFrame2.getTable().getSelectedRow(); if (viewIndex != -1) { int id = Integer.parseInt(AdminFrame2.getTable().getValueAt(viewIndex, 0).toString()); try { itProduct = stock.getProductsInAscendingOrder(); while (itProduct.hasNext()) { p = itProduct.next(); if (p.getID() == id) { stock.removeProduct(p); break; } } } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(null, "Introduceti datele corect si completati toate campurile!", "Eroare", JOptionPane.WARNING_MESSAGE); } int modelIndex = AdminFrame2.getTable().convertRowIndexToModel(viewIndex); // model DefaultTableModel model = (DefaultTableModel) AdminFrame2.getTable().getModel(); model.removeRow(modelIndex); } manager.serializaWarehouse(stock); } } } public class SearchButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { itProduct = stock.getProductsInAscendingOrder(); String s = ""; String name = JOptionPane.showInputDialog("Give the name of the object to be searched:"); boolean este = false; try { while (itProduct.hasNext()) { p = itProduct.next(); if (p.getName().equals(name)) { s = s + "ID:" + p.getID() + " Name:" + p.getName() + " Quantity:" + p.getQuantity() + "\n"; este = true; } } if (este == false) { JOptionPane.showMessageDialog(null, "There is no product called " + name + "!", "Error!", JOptionPane.WARNING_MESSAGE); } else { JOptionPane.showMessageDialog(null, s, "Product Found", JOptionPane.DEFAULT_OPTION); } } catch (Exception a) { JOptionPane.showMessageDialog(null, "Introduce the name of the product:", "Error!", JOptionPane.WARNING_MESSAGE); } } } public class SeeButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { try { itOrder = orders.getOrdersInAscendingOrder(); while (itOrder.hasNext()) { o = itOrder.next(); Object[] row = { o.getID(), o.getProduct().getName(), o.getQuantity(), o.getCustomer().getName() }; ((DefaultTableModel) AdminFrame2.getTable().getModel()).addRow(row); } } catch (NumberFormatException e1) { } } } public class Search1ButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { itOrder = orders.getOrdersInAscendingOrder(); String s = ""; String id = JOptionPane.showInputDialog("Give the name of the order to be searched:"); boolean este = false; try { while (itOrder.hasNext()) { o = itOrder.next(); if (o.getID() == Integer.parseInt(id)) { s = s + "ID:" + o.getID() + " Customer:" + o.getCustomer().getName() + " Quantity:" + o.getQuantity() + "\n"; este = true; } } if (este == false) { JOptionPane.showMessageDialog(null, "There is no order with id " + id + "!", "Error!", JOptionPane.WARNING_MESSAGE); } else { JOptionPane.showMessageDialog(null, s, "Order Found", JOptionPane.DEFAULT_OPTION); } } catch (Exception a) { JOptionPane.showMessageDialog(null, "Introduce the number of the order:", "Error!", JOptionPane.WARNING_MESSAGE); } } } public class StockButtonActionListener implements ActionListener { @Override public void actionPerformed(final ActionEvent e) { String[] p = MessageDialogs.addProductPanel(); itProduct = stock.getProductsInAscendingOrder(); try { while (itProduct.hasNext()) { Product prod = itProduct.next(); if (prod.getName().equals(p[1]) && prod.getID() == Integer.parseInt(p[0])) { int row = MessageDialogs.getRowByValue(AdminFrame2.getTable().getModel(), p[1]); System.out.println(row); AdminFrame2.getTable().getModel() .setValueAt(new Integer(prod.getQuantity() + Integer.parseInt(p[2])), row, 2); prod.setQuantity(prod.getQuantity() + Integer.parseInt(p[2])); prod.getQuantity(); } } } catch (Exception a) { JOptionPane.showMessageDialog(null, "There is no product with this id", "Error!", JOptionPane.WARNING_MESSAGE); } manager.serializaWarehouse(stock); } } public Warehouse getStock() { return stock; } public void setStock(Warehouse stock) { this.stock = stock; } public static AdminFrame2 getFrame() { return frame; } public static void setFrame(AdminFrame2 frame) { AdminFrameController.frame = frame; } public boolean checkForUnderStock() { if (total < UNDERSTOCK) { return true; } else { return false; } } public boolean checkForOverStock() { if (total > OVERSTOCK) { return true; } else { return false; } } public int getTotalNumberOfProducts(Warehouse w) { Iterator<Product> it = w.getProductsInAscendingOrder(); int total = 0; while (it.hasNext()) { Product p = it.next(); total = total + p.getQuantity(); } return total; } }